﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
using namespace std;
#include "Date.h"

//class A
//{
//public:
//	A(int a = 1)
//	{
//		_a = a;
//		cout << "A =" << _a << endl;
//	}
//	~A()
//	{
//		cout << "~A =" << _a << endl;
//	}
//private:
//	int _a;
//};
//
//A s1(1);
//int main()
//{
//	static A s2(2);
//	A s3(3);
//	A s4(4);
//	static A s5(5);
//	return 0;
//	//system("pause");
//}

//class A
//{
//public:
//	A(int a = 1)
//	{
//		_a = a;
//		cout << "A->" << _a << endl;
//	}
//	~A()
//	{
//		cout << "~A->" << _a << endl;
//	}
//	A(const A& aa)
//	{
//		_a = aa._a;
//		cout << "copy" << _a << endl;
//	}
//private:
//	int _a;
//};
//
//A fucn1()
//{
//	static A s1(1);
//	return s1;
//}
//A& fucn2()
//{
//	static A s2(2);
//	return s2;
//}
//int main()
//{
//	fucn1();
//	cout << endl << endl;
//	fucn2();
//	//return 0;
//	system("pause");
//}


//class Date
//{
//public:
//	Date(int year, int minute, int day)
//	{
//		cout << "Date(int,int,int):" << this << endl;
//	}
//	Date(const Date& d)
//	{
//		cout << "Date(const Date& d):" << this << endl;
//	}
//	~Date()
//	{
//		cout << "~Date():" << this << endl;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//Date Test(Date d)
//{
//	Date temp(d);
//	return temp;
//}
//int main()
//{
//	Date d1(2022, 1, 13);
//	Test(d1);
//	return 0;
//}

//class Date
//{
//public:
//	Date(int year = 1900, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	
//     // 前置++：返回+1之后的结果
//    // 注意：this指向的对象函数结束后不会销毁，故以引用方式返回提高效率
//	Date& operator++()
//	{
//		_day+=1;
//		return (*this);
//	}
//	// 后置++：
//	// 前置++和后置++都是一元运算符，为了让前置++与后置++形成能正确重载
//	// C++规定：后置++重载时多增加一个int类型的参数，但调用函数时该参数不用传递，编译器自动传递
//	// 注意：后置++是先使用后+1，因此需要返回+1之前的旧值，故需在实现时需要先将this保存一份，然后给this + 1
//	//而tmp是临时对象，因此只能以值的方式返回，不能返回引用
//	Date operator++(int)
//	{
//		Date tmp = (*this);
//		_day+=1;
//		return tmp;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//int main()
//{
//	Date d;
//	Date d1(2022, 1, 13);
//	d = d1++; // d: 2022,1,13   d1:2022,1,14
//	d = ++d1; // d: 2022,1,15   d1:2022,1,15
//	//return 0;
//	system("pause");
//}

//int main()
//{
//	
//	system("pause");
//}


void TestDate1()
{
	Date d1(2022, 7, 24);
	Date d2(2022, 7, 25);
	Date d3(2021, 7, 25);
	(d2 - 4).Print();
	(d2 - 40).Print();
	(d2 - 400).Print();
	(d2 - 4000).Print();

	int x = d2 - d3;
	cout << x << endl;
	cout << (d1 < d2) << endl;
	cout << (d1 < d3) << endl;
	cout << (d1 == d3) << endl;
	cout << (d1 > d3) << endl;
}

void TestDate2()
{
	//Date d1(2022, 7, 24);
	//d1 += 4;
	//d1.Print();

	//d1 += 40; // 跨月
	//d1.Print();

	//d1 += 400;// 跨年
	//d1.Print();

	//d1 += 4000; // 跨闰年
	//d1.Print();

	Date d1(2022, 7, 24);
	/*Date d2 = d1 + 4;
	d2.Print();*/
	(d1 + 4).Print();
	(d1 + 40).Print();// 跨月
	(d1 + 400).Print();// 跨年
	(d1 + 4000).Print(); // 跨闰年
	(d1 + 40000).Print();

	Date ret1 = ++d1; // d1.operator++(&d1)
	Date ret2 = d1++; // d1.operator++(&d2, 0)
}

int main()
{
	TestDate1();
	//TestDate2();
	system("pause");
	return 0;
}